package yb.ecp.fast.user.dao.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import yb.ecp.fast.user.dao.entity.RoleDO;
import yb.ecp.fast.user.dao.entity.UserRoles;

import java.util.List;

@Mapper
public interface RoleMapper
{
    int deleteByPrimaryKey(String id);

    int insert(RoleDO record);

    int insertSelective(RoleDO record);

    RoleDO selectByPrimaryKey(String id);

    int updateByPrimaryKeySelective(RoleDO record);

    int updateByPrimaryKey(RoleDO record);

    /**
     * 新增人员角色
     *
     * @param userRole
     * @return
     */
    int insertRoleUsers(UserRoles userRole);

    int deleteRoleUsers(String roleId);

    List<String> selectUserIdByRoleId(@Param("roleId") String roleId);

    List<String> selectByWorkspaceId(@Param("workspaceId") String workspaceId);

    List<RoleDO> selectAll(@Param("channel") int channel, @Param("type") Integer type,@Param("workspaceId") String workspaceId);

    List<RoleDO> queryRolesByDepartment(@Param("deptId") String deptId, @Param("workspaceId") String workspaceId);

    /**
     *  添加角色操作：id为默认空值，校验名称是否存在<br>
     *修改角色操作：id为当前角色ID，校验是否还存在同名（避免修改前名称和修改后名称相同）
     * @param id
     * @param name
     * @param spaceId
     * @return
     */
    Long countByName(@Param("roleId") String id, @Param("name") String name, @Param("spaceId") String spaceId,@Param("deptId") String deptId);

    Long countUserByRoleId(@Param("roleId") String roleId);

    List<String> selectRoleIdsByUserId(String userId);

    int addUserRole(@Param("roleId") String roleId, @Param("userId") String userId,@Param("userFlag") Integer userFlag );

    int addUserRoleRelation(@Param("roleId") String roleId, @Param("userId") String userId,@Param("userFlag") Integer userFlag);

    int checkUserRole(@Param("roleId") String roleId, @Param("userId") String userId);

    int removeUserRole(@Param("roleId") String roleId, @Param("userId") String userId);

    /**
     * 删除用户所有的角色
     *
     * @param userId String
     * @return int
     */
    int removeRoleByUser(String userId);

    List<Integer> queryAuthIdsByRoleId(String roleId);

    int selectRolesReferencedCount(@Param("deptId")String deptId, @Param("spaceId")String spaceId);

}
